{
  "title":"Drag and Drop",
  "description":"Method of easily dragging and dropping elements on a page, requiring minimal JavaScript.",
  "spec":"https://html.spec.whatwg.org/multipage/interaction.html#dnd",
  "status":"ls",
  "links":[
    {
      "url":"http://html5doctor.com/native-drag-and-drop/",
      "title":"HTML5 Doctor article"
    },
    {
      "url":"http://nettutsplus.s3.amazonaws.com/64_html5dragdrop/demo/index.html",
      "title":"Shopping cart demo"
    },
    {
      "url":"http://html5demos.com/drag",
      "title":"Demo with link blocks"
    },
    {
      "url":"https://www.webplatform.org/docs/dom/DragEvent",
      "title":"WebPlatform Docs"
    },
    {
      "url":"https://github.com/MihaiValentin/setDragImage-IE",
      "title":"Polyfill for setDragImage in IE"
    },
    {
      "url":"http://blog.teamtreehouse.com/implementing-native-drag-and-drop",
      "title":"Implementing Native Drag and Drop"
    },
    {
      "url":"https://github.com/timruffles/ios-html5-drag-drop-shim",
      "title":"iOS/Android shim for HTML 5 drag'n'drop"
    },
    {
      "url":"https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6542268-setdragimage-on-datatransfer-of-dragevent",
      "title":"Microsoft Edge setDragImage feature request on UserVoice"
    }
  ],
  "bugs":[
    {
      "description":"Chrome strips out newlines from `text/uri-list` [see bug](https://code.google.com/p/chromium/issues/detail?id=239745)"
    },
    {
      "description":"In Chrome, `DataTransfer.addElement` is not implemented. There is no other way to implement a draggable object which updates during the drag due to some other circumstances (e.g. changes color on a valid drop spot), as it is just a static image if `addElement` is not supported."
    },
    {
      "description":"In Firefox, an element won't drag unless the `dragstart` handler sets `dataTransfer` data (even if it doesn't get retrieved). [Test case](https://codepen.io/michai/pen/NwORqO)"
    },
    {
      "description":"In Firefox, drag and drop does not work when the page is served as `application/xhtml+xml` [Mozilla Bug #751778](https://bugzilla.mozilla.org/show_bug.cgi?id=751778), [Mozilla Bug #1106160](https://bugzilla.mozilla.org/show_bug.cgi?id=1106160)"
    },
    {
      "description":"In Firefox, the `dragstart` event does not fire on `button` elements. This effectively disables drag and drop for `button` elements."
    },
    {
      "description":"Safari doesn't implement the `DragEvent` interface. It adds a `dataTransfer` property to `MouseEvent` instead. See [WebKit bug #103423](https://bugs.webkit.org/show_bug.cgi?id=103423)."
    },
    {
      "description":"In Safari 8, after setting `event.dataTransfer.dropEffect`, the value in the `drop` event is always `'none'`"
    },
    {
      "description":"In IE9-10, the `draggable` attribute could be effectively applied for `a` and `img` elements. For `div` and `span` elements you should call `element.dragDrop()` to start drag event."
    },
    {
      "description":"In IE9-11, using `\"text/plain\"` as the format for `event.dataTransfer.setData` and `event.dataTransfer.getData` reportedly does not work and causes a JS error. The format needs to be `\"text\"`, which seems to work in all the mainstream browsers (Chrome, Safari, Firefox, IE9-11, Edge)."
    }
  ],
  "categories":[
    "HTML5"
  ],
  "stats":{
    "ie":{
      "5.5":"a #1 #3",
      "6":"a #1 #3",
      "7":"a #1 #3",
      "8":"a #1 #3",
      "9":"a #1 #3",
      "10":"a #2 #3",
      "11":"a #2 #3"
    },
    "edge":{
      "12":"a #2",
      "13":"a #2",
      "14":"a #2",
      "15":"a #2",
      "16":"a #2",
      "17":"a #2",
      "18":"y",
      "79":"y",
      "80":"y",
      "81":"y",
      "83":"y",
      "84":"y",
      "85":"y",
      "86":"y",
      "87":"y",
      "88":"y",
      "89":"y",
      "90":"y",
      "91":"y",
      "92":"y",
      "93":"y",
      "94":"y",
      "95":"y",
      "96":"y"
    },
    "firefox":{
      "2":"p",
      "3":"p",
      "3.5":"y",
      "3.6":"y",
      "4":"y",
      "5":"y",
      "6":"y",
      "7":"y",
      "8":"y",
      "9":"y",
      "10":"y",
      "11":"y",
      "12":"y",
      "13":"y",
      "14":"y",
      "15":"y",
      "16":"y",
      "17":"y",
      "18":"y",
      "19":"y",
      "20":"y",
      "21":"y",
      "22":"y",
      "23":"y",
      "24":"y",
      "25":"y",
      "26":"y",
      "27":"y",
      "28":"y",
      "29":"y",
      "30":"y",
      "31":"y",
      "32":"y",
      "33":"y",
      "34":"y",
      "35":"y",
      "36":"y",
      "37":"y",
      "38":"y",
      "39":"y",
      "40":"y",
      "41":"y",
      "42":"y",
      "43":"y",
      "44":"y",
      "45":"y",
      "46":"y",
      "47":"y",
      "48":"y",
      "49":"y",
      "50":"y",
      "51":"y",
      "52":"y",
      "53":"y",
      "54":"y",
      "55":"y",
      "56":"y",
      "57":"y",
      "58":"y",
      "59":"y",
      "60":"y",
      "61":"y",
      "62":"y",
      "63":"y",
      "64":"y",
      "65":"y",
      "66":"y",
      "67":"y",
      "68":"y",
      "69":"y",
      "70":"y",
      "71":"y",
      "72":"y",
      "73":"y",
      "74":"y",
      "75":"y",
      "76":"y",
      "77":"y",
      "78":"y",
      "79":"y",
      "80":"y",
      "81":"y",
      "82":"y",
      "83":"y",
      "84":"y",
      "85":"y",
      "86":"y",
      "87":"y",
      "88":"y",
      "89":"y",
      "90":"y",
      "91":"y",
      "92":"y",
      "93":"y",
      "94":"y",
      "95":"y",
      "96":"y",
      "97":"y"
    },
    "chrome":{
      "4":"y",
      "5":"y",
      "6":"y",
      "7":"y",
      "8":"y",
      "9":"y",
      "10":"y",
      "11":"y",
      "12":"y",
      "13":"y",
      "14":"y",
      "15":"y",
      "16":"y",
      "17":"y",
      "18":"y",
      "19":"y",
      "20":"y",
      "21":"y",
      "22":"y",
      "23":"y",
      "24":"y",
      "25":"y",
      "26":"y",
      "27":"y",
      "28":"y",
      "29":"y",
      "30":"y",
      "31":"y",
      "32":"y",
      "33":"y",
      "34":"y",
      "35":"y",
      "36":"y",
      "37":"y",
      "38":"y",
      "39":"y",
      "40":"y",
      "41":"y",
      "42":"y",
      "43":"y",
      "44":"y",
      "45":"y",
      "46":"y",
      "47":"y",
      "48":"y",
      "49":"y",
      "50":"y",
      "51":"y",
      "52":"y",
      "53":"y",
      "54":"y",
      "55":"y",
      "56":"y",
      "57":"y",
      "58":"y",
      "59":"y",
      "60":"y",
      "61":"y",
      "62":"y",
      "63":"y",
      "64":"y",
      "65":"y",
      "66":"y",
      "67":"y",
      "68":"y",
      "69":"y",
      "70":"y",
      "71":"y",
      "72":"y",
      "73":"y",
      "74":"y",
      "75":"y",
      "76":"y",
      "77":"y",
      "78":"y",
      "79":"y",
      "80":"y",
      "81":"y",
      "83":"y",
      "84":"y",
      "85":"y",
      "86":"y",
      "87":"y",
      "88":"y",
      "89":"y",
      "90":"y",
      "91":"y",
      "92":"y",
      "93":"y",
      "94":"y",
      "95":"y",
      "96":"y",
      "97":"y",
      "98":"y",
      "99":"y"
    },
    "safari":{
      "3.1":"y",
      "3.2":"y",
      "4":"y",
      "5":"y",
      "5.1":"y",
      "6":"y",
      "6.1":"y",
      "7":"y",
      "7.1":"y",
      "8":"y",
      "9":"y",
      "9.1":"y",
      "10":"y",
      "10.1":"y",
      "11":"y",
      "11.1":"y",
      "12":"y",
      "12.1":"y",
      "13":"y",
      "13.1":"y",
      "14":"y",
      "14.1":"y",
      "15":"y",
      "15.1":"y",
      "TP":"y"
    },
    "opera":{
      "9":"p",
      "9.5-9.6":"p",
      "10.0-10.1":"p",
      "10.5":"p",
      "10.6":"p",
      "11":"p",
      "11.1":"p",
      "11.5":"p",
      "11.6":"p",
      "12":"y",
      "12.1":"y",
      "15":"y",
      "16":"y",
      "17":"y",
      "18":"y",
      "19":"y",
      "20":"y",
      "21":"y",
      "22":"y",
      "23":"y",
      "24":"y",
      "25":"y",
      "26":"y",
      "27":"y",
      "28":"y",
      "29":"y",
      "30":"y",
      "31":"y",
      "32":"y",
      "33":"y",
      "34":"y",
      "35":"y",
      "36":"y",
      "37":"y",
      "38":"y",
      "39":"y",
      "40":"y",
      "41":"y",
      "42":"y",
      "43":"y",
      "44":"y",
      "45":"y",
      "46":"y",
      "47":"y",
      "48":"y",
      "49":"y",
      "50":"y",
      "51":"y",
      "52":"y",
      "53":"y",
      "54":"y",
      "55":"y",
      "56":"y",
      "57":"y",
      "58":"y",
      "60":"y",
      "62":"y",
      "63":"y",
      "64":"y",
      "65":"y",
      "66":"y",
      "67":"y",
      "68":"y",
      "69":"y",
      "70":"y",
      "71":"y",
      "72":"y",
      "73":"y",
      "74":"y",
      "75":"y",
      "76":"y",
      "77":"y",
      "78":"y",
      "79":"y",
      "80":"y",
      "81":"y",
      "82":"y"
    },
    "ios_saf":{
      "3.2":"n",
      "4.0-4.1":"n",
      "4.2-4.3":"n",
      "5.0-5.1":"n",
      "6.0-6.1":"n",
      "7.0-7.1":"n",
      "8":"n",
      "8.1-8.4":"n",
      "9.0-9.2":"n",
      "9.3":"n",
      "10.0-10.2":"n",
      "10.3":"n",
      "11.0-11.2":"n",
      "11.3-11.4":"n",
      "12.0-12.1":"n",
      "12.2-12.5":"n",
      "13.0-13.1":"n",
      "13.2":"n",
      "13.3":"n",
      "13.4-13.7":"n",
      "14.0-14.4":"n",
      "14.5-14.8":"n",
      "15.0-15.1":"y"
    },
    "op_mini":{
      "all":"n"
    },
    "android":{
      "2.1":"n",
      "2.2":"n",
      "2.3":"n",
      "3":"n",
      "4":"n",
      "4.1":"n",
      "4.2-4.3":"n",
      "4.4":"n",
      "4.4.3-4.4.4":"n",
      "96":"y #4"
    },
    "bb":{
      "7":"n",
      "10":"n"
    },
    "op_mob":{
      "10":"p",
      "11":"p",
      "11.1":"p",
      "11.5":"p",
      "12":"p",
      "12.1":"y",
      "64":"y #4"
    },
    "and_chr":{
      "96":"y #4"
    },
    "and_ff":{
      "94":"n"
    },
    "ie_mob":{
      "10":"y",
      "11":"y"
    },
    "and_uc":{
      "12.12":"n"
    },
    "samsung":{
      "4":"n",
      "5.0-5.4":"n",
      "6.2-6.4":"n",
      "7.2-7.4":"n",
      "8.2":"n",
      "9.2":"n",
      "10.1":"n",
      "11.1-11.2":"n",
      "12.0":"n",
      "13.0":"n",
      "14.0":"n",
      "15.0":"n"
    },
    "and_qq":{
      "10.4":"y"
    },
    "baidu":{
      "7.12":"n"
    },
    "kaios":{
      "2.5":"n"
    }
  },
  "notes":"`dataTransfer.items` only supported by Chrome.\r\n\r\nCurrently no browser supports the `dropzone` attribute.\r\n\r\nFirefox supports any kind of DOM elements for `.setDragImage`. Chrome must have either an `HTMLImageElement` or any kind of DOM Element attached to the DOM _and within the viewport_ of the browser for `.setDragImage`.",
  "notes_by_num":{
    "1":"Partial support refers to no support for the `dataTransfer.files` or `.types` objects",
    "2":"Partial support refers to not supporting `.setDragImage`",
    "3":"Partial support refers to limited supported formats for `dataTransfer.setData`/`getData`.",
    "4":"Not supported in Chromium browsers on Android 6 or older."
  },
  "usage_perc_y":83.68,
  "usage_perc_a":0.89,
  "ucprefix":false,
  "parent":"",
  "keywords":"draganddrop, draggable",
  "ie_id":"",
  "chrome_id":"",
  "firefox_id":"",
  "webkit_id":"",
  "shown":true
}
